﻿using System;

using Ewk.Math.Algebra;
using Ewk.Math.ComputationTypes;

namespace Ewk.MachineLearning.Clustering.MultidimensionalScaling
{
    public interface IDifferenceContainer<T>
        where T : struct, IComparable, IFormattable, IConvertible, IComparable<T>, IEquatable<T>
    {
        /// <summary>
        /// Gets the number of <see cref="Vector{T}"/> instances in this container.
        /// </summary>
        int VectorCount { get; }

        /// <summary>
        /// Gets the difference between the i-th <see cref="Vector{T}"/>
        /// and the j-th <see cref="Vector{T}"/> of the internal <see cref="Vector{T}"/> list.
        /// </summary>
        /// <param name="i">The index of the first <see cref="Vector{T}"/> within the internal list.</param>
        /// <param name="j">The index of the second <see cref="Vector{T}"/> within the internal list.</param>
        /// <returns>A <see cref="Computable{T}"/> that represents the difference between the first and the second <see cref="Vector{T}"/>.</returns>
        Computable<T> this[int i, int j] { get; }
    }
}
